home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / ForCLI / 0Utils13.lha / 0Utils / SRunSX.c < prev    next >
C/C++ Source or Header  |  1995-04-10  |  4KB  |  183 lines

  1.  
  2. /******************************************************************************
  3.  
  4.     MODULE
  5.     SRunSX.c
  6.  
  7.     DESCRIPTION
  8.     Run a command synchroneously (usable e.g. to redirect a script)
  9.  
  10.     NOTES
  11.     Kickstart 2.0+ required
  12.     compiles w/ SAS/C v6.51
  13.  
  14.     BUGS
  15.     "SRunSX COMMAND commandstring" fails; U _MUST_ use
  16.     "SRunSX commandstring"
  17.  
  18.     TODO
  19.     ?
  20.  
  21.     EXAMPLES
  22.     > echo >  t:xxx "echo hallo"
  23.     > protect t:xxx +s
  24.     > t:xxx
  25.       hallo
  26.     > "t:xxx" ; beware of the quotes!
  27.       EXECUTE: Can't open t:xxx
  28.       object not found
  29.     > echo >"t:xxx " "echo error - this is the wrong script"
  30.     > "t:xxx" ; beware of the quotes!
  31.       error - this is the wrong script
  32.     > SRunSX "t:xxx"
  33.       hallo
  34.     > SRunSX echo hallo
  35.       hallo
  36.  
  37.     SEE ALSO
  38.     SRun
  39.  
  40.     HISTORY
  41.     20-02-95 b_noll created SRun.*
  42.     21-02-95 b_noll added version/format-prefix/offset
  43.     20-03-95 b_noll added args diagnostics
  44.     09-04-95 b_noll shortened the file: arg Parsing dropped, removed NP_tags
  45.     10-04-95 b_noll copied 2 SRunSX.* Removed #ifdef PARSE added Examine
  46.  
  47.     AUTHOR
  48.     Bernd Noll, Brunnenstrasse 55, D-67661 Kaiserslautern
  49.     b_noll@informatik.uni-kl.de
  50.  
  51. ******************************************************************************/
  52.  
  53. /**************************************
  54.         Includes
  55. **************************************/
  56.  
  57. #ifndef   EXEC_LIBRARIES_H
  58. # include <exec/libraries.h>
  59. #endif /* EXEC_LIBRARIES_H */
  60.  
  61. #ifndef   CLIB_EXEC_PROTOS_H
  62. # include <clib/exec_protos.h>
  63. #endif /* CLIB_EXEC_PROTOS_H */
  64.  
  65. #ifndef   DOS_DOS_H
  66. # include <dos/dos.h>
  67. #endif /* DOS_DOS_H */
  68.  
  69. #ifndef   CLIB_DOS_PROTOS_H
  70. # include <clib/dos_protos.h>
  71. #endif /* CLIB_DOS_PROTOS_H */
  72.  
  73. #include <proto/dos.h>
  74. #include <proto/exec.h>
  75.  
  76. /* ******************** USER INCLUDES ******************** */
  77.  
  78. #include <dos/dostags.h>
  79. #include <string.h>
  80. #include <exec/memory.h>
  81.  
  82. /* ******************** USER INCLUDES ******************** */
  83.  
  84. /**************************************
  85.      Defines & Structures
  86. **************************************/
  87.  
  88. #ifndef ABSEXECBASE
  89. #define ABSEXECBASE ((struct ExecBase **)4L)
  90. #endif
  91.  
  92. struct _arg {
  93. /* ******************** USER FORMAT ******************** */
  94.  
  95. #define FORMAT "COMMAND/F"
  96.  
  97.     STRPTR command;
  98.  
  99. /* ******************** USER FORMAT ******************** */
  100. }; /* struct _argv */
  101.  
  102. #define MAXPATHLEN 256
  103. #define MAXLINELEN 256
  104.  
  105. #define VERSIONPREFIX    "\0$VER: "
  106. #define VERSIONOFFSET    0
  107. #define FORMATPREFIX    "\0$ARG: "
  108. #define FORMATOFFSET    7
  109.  
  110. /**************************************
  111.         Implementation
  112. **************************************/
  113.  
  114. long _main (void)
  115. {
  116.     const char* version = VERSIONPREFIX "SRunSX 1.3 " __AMIGADATE__  + VERSIONOFFSET;
  117.     long retval = RETURN_FAIL;
  118.     struct ExecBase*SysBase = *ABSEXECBASE;
  119.     struct Library* DOSBase;
  120.  
  121.     if (DOSBase = OpenLibrary (DOSNAME, 37)) {
  122.     STRPTR template = FORMATPREFIX FORMAT;
  123.     STRPTR a;
  124.     BOOL sprot = NULL;
  125.  
  126.     a = GetArgStr();
  127.     retval = RETURN_ERROR;
  128.  
  129.     do {
  130.         /* ---- Skip spaces */
  131.         //while ((*a == ' ') || (*a == '\t')) ++a;
  132.  
  133.         /* ---- check for quoted script file */
  134.         //if (*a == '"')
  135.         {
  136.         UBYTE buffer[MAXPATHLEN];
  137.         BPTR lock;
  138.         if (ReadItem (buffer, MAXPATHLEN, NULL) == ITEM_QUOTED)
  139.             if (lock = Lock(buffer, SHARED_LOCK)) {
  140.             struct FileInfoBlock *fib;
  141.             if (fib = AllocDosObject(DOS_FIB, NULL)) {
  142.                 if (Examine (lock, fib))
  143.                 sprot = fib->fib_Protection & FIBF_SCRIPT;
  144.                 FreeDosObject (DOS_FIB, fib);
  145.             } /* if */
  146.             UnLock(lock);
  147.             } /* if */
  148.         } /* if */
  149.  
  150.         if (sprot) {
  151.         STRPTR b;
  152.         if (!(b = AllocVec(strlen(a) + 10, MEMF_CLEAR))) {
  153.             retval = 20;
  154.             break;
  155.         } /* if */
  156.  
  157.         strcpy (b, "Execute ");
  158.         strcpy (b + 8, a);
  159.         a = b;
  160.         } /* if */
  161.  
  162.         retval = SystemTagList (a, NULL);
  163.  
  164.         if (sprot)
  165.         FreeVec (a);
  166.     } while (0);
  167.  
  168.     if (retval == -1) {
  169.         retval = RETURN_ERROR;
  170.     } /* if */
  171.  
  172.     if (retval > RETURN_WARN)
  173.         PrintFault(IoErr(), "SRunSX");
  174.  
  175.     CloseLibrary (DOSBase);
  176.     } /* if */
  177.     return (retval);
  178. } /* _main */
  179.  
  180. /******************************************************************************
  181. *****  END SRunSX.c
  182. ******************************************************************************/
  183.